1. Field of the Invention
The present invention relates, in general, to software installation, and, more particularly, to software, systems and methods for verifying a number of installed binary programs.
2. Relevant Background
Software applications comprise a plurality of executable binary programs and data files that cooperate to perform program specified behaviors. While early software applications comprised an integral set of binary code, modern applications comprise a tens or hundreds of individual application components referred to as “binaries”. The application is implemented by executing the plurality of binaries in a program-ordered sequence so as to implement the desired behavior. Each of the binaries can be associated with a signature such as an MD5 hash value that uniquely identifies the binary. An MD5 signature will change for different versions and different compilations of the binary, and so is a reliable identifier of the binary.
When application software is installed, the various binaries that make up the application are stored from a source file or installation file, which itself may comprise a plurality of files, into various locations within the file system of a computer upon which the application will execute. The file system may include network storage in addition to local storage. During execution, the various components interact with each other and with the operating system implemented on the computer to provide the desired application behavior. As the applications are often provided independently of the operating system, the developers of application software are often referred to as “independent software vendors” or “ISVs”.
When a software application is installed, its constituent binaries are copied from an installation source file or files into various directories throughout the file system. The location of each binary in the file system is determined by the installation routines. In some cases applications are delivered as packages that are installed via an installation tool that maintains records of binary locations, making it easier to determine an accurate set of binaries on the particular computer. However, if even one application does not use standard package installation software precise installation records are not typically maintained. Further, binaries may be installed or modified manually after installation, making the installation records inaccurate or incomplete.
Hence, after installation, the operating system has no guaranteed knowledge of where each of the constituent binaries exist on a given system unless specific operating system services are used during the installation. Thereafter, when a given system is analyzed to determine if it will behave properly in response to an operating system change, the analysis typically relies on an imprecise determination of what applications are installed on the system. Accordingly, in current computer systems there is no readily accessible means to identify an accurate listing of installed applications and their constituent binaries.
Analyzing applications to ensure internal compatibility (i.e., compatibility between the binaries making up the application) is a relatively easy problem in that the ISV has control over all of the binaries. Testing applications to ensure external compatibility (i.e., compatibility with the operating systems) is more complex, but remains a finite problem in that the application can be tested against one or at most a few operating system specifications. However, in order to test a change in the operating system, the operating system provider must be able to test the changes against a large and often indeterminate number and variety of applications. Each of hundreds or thousands of binaries must be verified as compatible with the operating system changes. Moreover, this verification must be performed across not just one system, but against all applications that are supported by the operating system.
Operating system providers currently perform extensive testing of binaries to certify them as compatible with an operating system version or change. This testing is largely analytical in that the binary can be analyzed for compatibility with operating system interface specifications. A record of certified applications is maintained. However, it is impossible to certify every possible application. Moreover, because application software changes relatively rapidly, even a certified application may be updated after installation to include binaries that were not certified when the application was analyzed/tested. Hence, when an enterprise or user is considering updating the operating system, there is both real and perceived risk that an application will not function properly after the update. A need exists for a system and method for ensuring program compatibility with operating system changes.